看雪.京东 2018 CTF 第四题点评与解析
周末快乐~一周已经过去,CTF比赛也已经进行到了第五题。
在刚刚结束的第四题中,共有30人攻破~
各路英雄一路奋战,战况如下:
前三名依然稳如泰山
看雪版主&评委 netwind 点评
作者主要通过密码学算法来对序列号进行验证,并对AES算法加入了花指令。通过爆破AES密钥未知位,得到完整密钥后就可以得到序列号的前一部分,同时由于题目中RSA算法里面的参数n可被分解,可以解密RSA加密的字符串,从而得到序列号后面的部分,最后得到答案。此题有助于理解逆向领域密码学算法相关知识。
看雪.京东 2018 CTF 第四题 作者简介
大帅锅
bbs.pediy.com/user-759174
第四题出题者简介:
郑维明,男,四川遂宁人 ,2018年6月16日毕业于西南科技大学 ,生物工程+计算机科学与技术专业,2017年接触看雪论坛发现里面群英荟萃、高手如云,是一个能让你成长很快的地方,从此便爱上这个论坛。爱好:逆向,数学,唱歌,跳舞。
看雪.京东 2018 CTF 第四题 设计思路
考察点:
1、RSA算法
2、AES算法
3、 以及简单的花指令
程序对已知明文(包括RSA的n,已知aes后13位)都进行简单加密。
加密算法为:
void str_decode(char *str){
int j = 1;
for (int i = 0; i < strlen(str); i++){
str[i] = str[i] ^ j;
j++;
}
}
程序运行将创建子进程kill父进程。
子进程为主要进程。
Serial 分两部分。前3字节用于AES 后面用于RSA
注册码Serial=”520iamahandsomeguyhaha1”
程序运行中还有一个只有子进程才能触发的flag与serial[3]相加才能得aes的密钥
1.程序中在main函数和中插入了str_decode函数中和RSA,AES算法处插入了少量花指令。
花指令采用形式:
第一类:
jb Lablel
jnb Label
db E8(E9)
Label: 代码
第二类:
calls2
__emit0e8h
s1:
jmps3
__emit0ebh
__emit00h
s2:
calls1
s3:
addesp,8
2.手工修改了main函数
手工修改代码处为:
将main函数的403130-403133 处的汇编代码移植到此处。分析者需正确识别去掉简单的花指令方能显现正确逻辑。
00403130 > 55 push ebp
00403131 8BEC mov ebp,esp
00403133 83EC 7C sub esp,0x7C
00403136 53 push ebx
00403137 56 push esi
00403138 57 push edi
00403139 8D7D 84 lea edi,dword ptrss:[ebp-0x7C]
0040313C B9 1F000000 mov ecx,0x1F
RSA n 采用 msieve 分解用时2分钟
爆破aes:1000位数字只需0.003秒
# -*- coding: utf-8 -*-
import sys
import time
from Crypto.Cipher import AES
from binascii import b2a_hex,a2b_hex
class prpcrypt():
def__init__(self, key):
self.key= key
self.mode= AES.MODE_ECB
defencrypt(self, text):
cryptor= AES.new(self.key, self.mode)
length= 16
count= len(text)
if(count% length != 0) :
add= length - (count % length)
else:
add= 0
text= text + ('\0' * add)
self.ciphertext= cryptor.encrypt(text)
returnb2a_hex(self.ciphertext)
defdecrypt(self, text):
cryptor= AES.new(self.key, self.mode)
plain_text= cryptor.decrypt(a2b_hex(text))
returnplain_text.rstrip('\0')
if __name__ == '__main__':
start_time=time.clock()
hash='912ca2036a9a0656d17b6b552f157f8e'
key='1314000000000'
fori in range(999):
i_=str(i)
iflen(i_)==1:
i_='00'+i_
iflen(i_)==2:
i_='0'+i_
pc= prpcrypt(i_+key) #初始化密钥
d= pc.encrypt("pediy")
ifd==hash:
printi_
printi_+key
break
print"time=%.3f" %(time.clock()-start_time)
程序采用vc编译。
看雪.京东 2018 CTF 第四题解析
*本解析来自看雪论坛 iweizime
常规做法,拿到程序后,拖到IDA Pro,由于没有壳,可以找到许多有用的信息。使用findcrypt-yara插件,可以找到AES算法中使用到的常数。再查看一下字符串,可以确定使用了MIRACL库。
用条件跳转指令对main函数的入口做了一点混淆,手动改好即可。
为了更好的利用IDA Pro的反汇编功能,可以使用keypatch插件将main函数的入口修复的一下。
在其他的地方,使用call指令进行了混淆,例如 0x00402580 出的函数,同样的,修复一下。就可以用F5了。
我们可以做的更好,使用nop将这一段垃圾指令清楚掉,然后用F5。
利用这个函数,可以解析出一些字符串。
serial:
success
error
912CA2036A9A0656D17B6B552F157F8E
0001314000000000
208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304
7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585
剩下的工作就没有什么技巧可言了,对照MIRACL库,将用到的函数标注出来,可以发现其验证流程。
验证分为两部分,输入的前三个字符,作为AES密钥的一部分,使用ECB模式,加密字符串pediy(需要补0),其结果与912CA2036A9A0656D17B6B552F157F8E 对比。
上图中arg0即为输入的前三个字符,有一个全局变量dword_495728不用管他,反正密钥本身也需要破解三个字符。爆破出来密钥是5211314000000000。所迷密钥的前三个字符为52#,#不确定。
剩下的字符,先做一个hex编码,然后变成一个大整数,用RSA来验证
n可以使用factordb.com分解
p = 208096057845685678782766058500526476379
q = 273086345401562743300402731618892888991
然后可以通过RSA解密出来明文为69616d6168616e64736f6d656775796861686131。hex解码一下就是iamahandsomeguyhaha1。
所以flag为520iamahandsomeguyhaha1。其中第三个字符一猜就是'0'啦。
做这个题需要找出使用的库,否则去逆库函数的话,需要花的时间太多了。
美男子,惹不起,惹不起O(∩_∩)O
CTF 寄语
netwind
bbs.pediy.com/user-39732
netwind:
2017年,看雪.Wifi万能钥匙 2017CTF年中赛和看雪.TSRC 2017CTF秋季赛连续成功举办,目前看雪CTF竞赛已经是国内逆向领域最专业、影响力最广的赛事。2018年,看雪CTF竞赛即将拉开序幕。本届大赛将依然严格按照竞赛规则进行,保证大赛的公平、公正、公开。
瑾代表看雪2018CTF大赛组委会并以大赛评委的名义对所有参加比赛的选手表示热烈的欢迎!相信所有参赛选手都会有不一样的收获,相信此次大赛会因你们精湛的技术而变得分外精彩!再此特别感谢所有关注、支持和帮助大赛的各界朋友,也希望大家持续关注和支持看雪CTF大赛!
我们希望能有更多的朋友来参与看雪CTF大赛,设计优质的作品,分享奇特的破解思路,结识朋友,探讨交流,共同步入技术的巅峰!
iweizime
bbs.pediy.com/user-677218
iweizime:
祝各位CTFer看汇编如同看小说,在看雪CTF中取得好成绩,更重要的是在比赛过程中能学到新的东西,提高自己的知识水平。
京东集团是中国收入最大的互联网企业之一,于2014年5月在美国纳斯达克证券交易所正式挂牌上市,业务涉及电商、金融和物流三大板块。
京东是一家技术驱动成长的公司,并发布了“第四次零售革命”下的京东技术发展战略。信息安全作为保障业务发展顺利进行的基石发挥着举足轻重的作用。为此,京东信息安全部从成立伊始就投入大量技术和资源,支撑京东全业务线安全发展,为用户、供应商和京东打造强大的安全防护盾。
随着京东全面走向技术化,大力发展人工智能、大数据、机器自动化等技术,将过去十余年积累的技术与运营优势全面升级。面向AI安全、IoT安全、云安全的机遇及挑战,京东安全积极布局全球化背景下的安全人才,开展前瞻性技术研究,成立了硅谷研发中心、安全攻防实验室等,并且与全球AI安全领域知名的高校、研究机构建立了深度合作。
京东不仅积极践行企业安全责任,同时希望以中立、开放、共赢的态度,与友商、行业、高校、政府等共同建设互联网安全生态,促进整个互联网的安全发展。
CTF 旗帜已经升起,等你来战!
扫描二维码,立即参战!
看雪2018安全开发者峰会
2018年7月21日,拥有18年悠久历史的老牌安全技术社区——看雪学院联手国内最大开发者社区CSDN,倾力打造一场技术干货的饕餮盛宴——2018 安全开发者峰会,将在国家会议中心隆重举行。会议面向开发者、安全人员及高端技术从业人员,是国内开发者与安全人才的年度盛事。此外峰会将展现当前最新、最前沿技术成果,汇聚年度最强实践案例,为中国软件开发者们呈献了一份年度技术实战解析全景图。
戳下图↓,立即购票,享5折优惠!